package Entita;

import java.util.ArrayList;


public class Interpretazione {
	private Tavola tavola;
	private String raccolta;
	private int idInterpretazione;
	private String inchiesta;
	private String qf = "+";
	private String posizione = "";
	private String mComprensione = "";
	private String numeroLocalizzazione = "";
	private String determinantePrimaria = "";
	private String tipoDeterminantePrimaria = "";
	private String qaDeterminantePrimaria = "";
	private String mDeterminanteSecondaria = "";
	private String tipoDeterminanteSecondaria = "";
	private String CDeterminanteSecondaria = "";
	private String semicDeterminanteSecondaria = "";
	private String cDeterminanteSecondaria = "";
	private String qaDeterminanteSecondaria = "";
	private String contenutiPrimari = "";
	private String contenutiPrimaritesto = "";
	private String contenutiSecondari1 = "";
	private String contenutiSecondari2 = "";
	private String contenutiSecondari3 = "";
	private String contenutiSecondari4 = "";
	private String contenutiSecondari5 = "";
	private String manifestazioniParticolari1 = "";
	private String manifestazioniParticolari2 = "";
	private String manifestazioniParticolari3 = "";
	private String manifestazioniParticolari4 = "";
	private String manifestazioniParticolari5 = "";
	private String rispostaComplessuale1 = "";
	private String rispostaComplessuale2 = "";
	private String rispostaComplessuale3 = "";
	private String rispostaComplessuale4 = "";
	private String rispostaComplessuale5 = "";
	private String frequenze = "";
	private int ordine = 0;
	private int idPaziente = 0;
	private int idTavola = 0;
	private Paziente paziente;

	public Tavola getTavola() {
		return tavola;
	}

	public void setTavola(Tavola tavola) {
		this.tavola = tavola;
	}

	public String getRaccolta() {
		return raccolta;
	}

	public void setRaccolta(String raccolta) {
		this.raccolta = raccolta;
	}

	public String getInchiesta() {
		return inchiesta;
	}

	public void setInchiesta(String inchiesta) {
		this.inchiesta = inchiesta;
	}

	public int getIdInterpretazione() {
		return idInterpretazione;
	}

	public void setIdInterpretazione(int numeroInterpretazione) {
		this.idInterpretazione = numeroInterpretazione;
	}

	public String getQf() {
		return qf;
	}

	public void setQf(String qf) {
		this.qf = qf;
	}

	public String getPosizione() {
		return posizione;
	}

	public void setPosizione(String posizione) {
		this.posizione = posizione;
	}

	public String getmComprensione() {
		return mComprensione;
	}

	public void setmComprensione(String mComprensione) {
		this.mComprensione = mComprensione;
	}

	public String getNumeroLocalizzazione() {
		return numeroLocalizzazione;
	}

	public void setNumeroLocalizzazione(String numeroLocalizzazione) {
		this.numeroLocalizzazione = numeroLocalizzazione;
	}

	public String getDeterminantePrimaria() {
		return determinantePrimaria;
	}

	public void setDeterminantePrimaria(String determinantePrimaria) {
		this.determinantePrimaria = determinantePrimaria;
	}

	public String getTipoDeterminantePrimaria() {
		return tipoDeterminantePrimaria;
	}

	public String getTipoDeterminantePrimariaSemplificata() {
		String text=tipoDeterminantePrimaria.replace("\u2191\u2193","D").replace("\u2191","E").replace("\u2193","F").replace("\u2195","B").replace("\u21BA","R").replace("\u26A5","E").replace("\u2642\u2640","C");
		return text;	
	}

	public void setTipoDeterminantePrimariaSemplificato(String tipoDeterminantePrimaria) {

	}	
	
	public void setTipoDeterminantePrimaria(String tipoDeterminantePrimaria) {
		if (tipoDeterminantePrimaria.length()!=2){
			this.tipoDeterminantePrimaria=tipoDeterminantePrimaria;
		}else{
		String text="";
		switch (tipoDeterminantePrimaria.charAt(0)) {
			case 'E':
				text="\u2191";
				break;
			case 'F':
				text="\u2193";
				break;
			case 'D':
				text="\u2191\u2193";
				break;
			case 'B':
				text="\u2195";
				break;
			case 'R':
				text="\u21BA";
				break;
			default:
				text=tipoDeterminantePrimaria.charAt(0)+"";
				break;
			}
			switch (tipoDeterminantePrimaria.charAt(1)) {
			case 'E':
				text+="\u26A5";
				break;
			case 'C':
				text+="\u2642\u2640";
				break;
			default:
				text+=tipoDeterminantePrimaria.charAt(1)+"";
				break;
			}
			this.tipoDeterminantePrimaria = text;
		}
	}

	public String getQaDeterminantePrimaria() {
		return qaDeterminantePrimaria;
	}

	public void setQaDeterminantePrimaria(String qaDeterminantePrimaria) {
		this.qaDeterminantePrimaria = qaDeterminantePrimaria;
	}

	public String getmDeterminanteSecondaria() {
		return mDeterminanteSecondaria;
	}

	public void setmDeterminanteSecondaria(String mDeterminanteSecondaria) {
		this.mDeterminanteSecondaria = mDeterminanteSecondaria;
	}

	public String getTipoDeterminanteSecondaria() {
		return tipoDeterminanteSecondaria;
	}

	public void setTipoDeterminanteSecondaria(String tipoDeterminanteSecondaria) {
		this.tipoDeterminanteSecondaria = tipoDeterminanteSecondaria;
	}

	public String getCDeterminanteSecondaria() {
		return CDeterminanteSecondaria;
	}

	public void setCDeterminanteSecondaria(String cDeterminanteSecondaria) {
		CDeterminanteSecondaria = cDeterminanteSecondaria;
	}

	public String getSemicDeterminanteSecondaria() {
		return semicDeterminanteSecondaria;
	}

	public void setSemicDeterminanteSecondaria(
			String semicDeterminanteSecondaria) {
		this.semicDeterminanteSecondaria = semicDeterminanteSecondaria;
	}

	public String getcDeterminanteSecondaria() {
		return cDeterminanteSecondaria;
	}

	public void setcDeterminanteSecondaria(String cDeterminanteSecondaria) {
		this.cDeterminanteSecondaria = cDeterminanteSecondaria;
	}

	public String getQaDeterminanteSecondaria() {
		return qaDeterminanteSecondaria;
	}

	public void setQaDeterminanteSecondaria(String qaDeterminanteSecondaria) {
		this.qaDeterminanteSecondaria = qaDeterminanteSecondaria;
	}

	public String getContenutiPrimari() {
		return contenutiPrimari;
	}

	public void setContenutiPrimari(String contenutiPrimari) {
		this.contenutiPrimari = contenutiPrimari;
	}

	public String getContenutiPrimaritesto() {
		return contenutiPrimaritesto;
	}

	public void setContenutiPrimaritesto(String contenutiPrimaritesto) {
		this.contenutiPrimaritesto = contenutiPrimaritesto;
	}

	public String getContenutiSecondari1() {
		return contenutiSecondari1;
	}

	public void setContenutiSecondari1(String contenutiSecondari1) {
		this.contenutiSecondari1 = contenutiSecondari1;
	}

	public String getContenutiSecondari2() {
		return contenutiSecondari2;
	}

	public void setContenutiSecondari2(String contenutiSecondari2) {
		this.contenutiSecondari2 = contenutiSecondari2;
	}

	public String getContenutiSecondari3() {
		return contenutiSecondari3;
	}

	public void setContenutiSecondari3(String contenutiSecondari3) {
		this.contenutiSecondari3 = contenutiSecondari3;
	}

	public String getContenutiSecondari4() {
		return contenutiSecondari4;
	}

	public void setContenutiSecondari4(String contenutiSecondari4) {
		this.contenutiSecondari4 = contenutiSecondari4;
	}

	public String getContenutiSecondari5() {
		return contenutiSecondari5;
	}

	public void setContenutiSecondari5(String contenutiSecondari5) {
		this.contenutiSecondari5 = contenutiSecondari5;
	}

	public String getFrequenze() {
		return frequenze;
	}

	public void setFrequenze(String frequenze) {
		this.frequenze = frequenze;
	}

	public String getManifestazioniParticolari1() {
		return manifestazioniParticolari1;
	}

	public void setManifestazioniParticolari1(String manifestazioniParticolari1) {
		this.manifestazioniParticolari1 = manifestazioniParticolari1;
	}

	public String getManifestazioniParticolari2() {
		return manifestazioniParticolari2;
	}

	public void setManifestazioniParticolari2(String manifestazioniParticolari2) {
		this.manifestazioniParticolari2 = manifestazioniParticolari2;
	}

	public String getManifestazioniParticolari3() {
		return manifestazioniParticolari3;
	}

	public void setManifestazioniParticolari3(String manifestazioniParticolari3) {
		this.manifestazioniParticolari3 = manifestazioniParticolari3;
	}

	public String getManifestazioniParticolari4() {
		return manifestazioniParticolari4;
	}

	public void setManifestazioniParticolari4(String manifestazioniParticolari4) {
		this.manifestazioniParticolari4 = manifestazioniParticolari4;
	}

	public String getManifestazioniParticolari5() {
		return manifestazioniParticolari5;
	}

	public void setManifestazioniParticolari5(String manifestazioniParticolari5) {
		this.manifestazioniParticolari5 = manifestazioniParticolari5;
	}

	public String getRispostaComplessuale1() {
		return rispostaComplessuale1;
	}

	public void setRispostaComplessuale1(String rispostaComplessuale1) {
		this.rispostaComplessuale1 = rispostaComplessuale1;
	}

	public String getRispostaComplessuale2() {
		return rispostaComplessuale2;
	}

	public void setRispostaComplessuale2(String rispostaComplessuale2) {
		this.rispostaComplessuale2 = rispostaComplessuale2;
	}

	public String getRispostaComplessuale3() {
		return rispostaComplessuale3;
	}

	public void setRispostaComplessuale3(String rispostaComplessuale3) {
		this.rispostaComplessuale3 = rispostaComplessuale3;
	}

	public String getRispostaComplessuale4() {
		return rispostaComplessuale4;
	}

	public void setRispostaComplessuale4(String rispostaComplessuale4) {
		this.rispostaComplessuale4 = rispostaComplessuale4;
	}

	public String getRispostaComplessuale5() {
		return rispostaComplessuale5;
	}

	public void setRispostaComplessuale5(String rispostaComplessuale5) {
		this.rispostaComplessuale5 = rispostaComplessuale5;
	}

	public int getOrdine() {
		return ordine;
	}

	public void setOrdine(int ordine) {
		this.ordine = ordine;
	}

	public int getIdPaziente() {
		return paziente.getID();
	}

	public void setIdPaziente(int idPaziente) {
		this.idPaziente = idPaziente;
	}

	public int getIdTavola() {
		return idTavola;
	}

	public void setIdTavola(int idTavola) {
		this.idTavola = idTavola;
	}

	public Paziente getPaziente() {
		return paziente;
	}

	public void setPaziente(Paziente paziente) {
		this.paziente = paziente;
	}

	public boolean isFC(){
		String determinante=getDeterminantePrimaria();
		if(determinante.equals("FC'b")||determinante.equals("ClobC")||
			determinante.equals("Clob/C")||determinante.equals("ClobC'b")||
			determinante.equals("Clob(C)C")||determinante.equals("Clob(C)/C")||
			determinante.equals("Clob(C)C'b")||determinante.equals("F(C)C")||
			determinante.equals("F(C)/C")||determinante.equals("F(C)C'b")||
			determinante.equals("MC")||determinante.equals("M/C")||
			determinante.equals("MC'b")||determinante.equals("MClobC")||
			determinante.equals("MClob/C")||determinante.equals("MClobC'b")||
			determinante.equals("MC(C)")||determinante.equals("M/C(C)")||
			determinante.equals("MC'b(C)")||//determinante.equals("MClob(C)")||
			determinante.equals("MClob(C)C")||determinante.equals("MClob(C)/C")||
			determinante.equals("MClob(C)C'b")||determinante.equals("FC")||
			determinante.equals("F/C")){
			return true;
		}
		return false;
	}
	
	public boolean isCF(){
		String determinante=getDeterminantePrimaria();
		if(determinante.equals("C'bF")||determinante.equals("CF")||
			determinante.equals("CClob")||determinante.equals("C/Clob")||
			determinante.equals("C'bClob")||determinante.equals("CF(C)")||
			determinante.equals("C/F(C)")||determinante.equals("C'bF(C)")||
			determinante.equals("CClob(C)")||determinante.equals("C/Clob(C)")||
			determinante.equals("C'bClob(C)")||determinante.equals("CM")||
			determinante.equals("C/F"))
		{
			return true;
		}
		return false;
	}
	
	public boolean isC(){
		String determinante=getDeterminantePrimaria();
		if(determinante.equals("C")||determinante.equals("C'b")||
			determinante.equals("CN"))
		{
			return true;
		}
		return false;
	}
	
	
	
	public String toString() {// TODO Risposta incompleta
		String stringa;
		if (qf == "") {
			stringa = "Risposta Persa";
		} else if (!isValid()) {
			stringa = "Risposta incompleta";
		} else {
			String textQA = "";
			if (tipoDeterminantePrimaria != "")
				textQA = tipoDeterminantePrimaria + " "
						+ qaDeterminantePrimaria;
			stringa = idInterpretazione + ") " + posizione + " "
					+ mComprensione + " " + determinantePrimaria + textQA + " "
					+ qaDeterminantePrimaria + " " + mDeterminanteSecondaria
					+ " " + tipoDeterminanteSecondaria + " "
					+ CDeterminanteSecondaria + " " + cDeterminanteSecondaria
					+ " " + semicDeterminanteSecondaria + " "
					+ qaDeterminanteSecondaria + " " + contenutiPrimari + " "
					+ frequenze + " " + manifestazioniParticolari1 + " "
					+ manifestazioniParticolari2 + " "
					+ manifestazioniParticolari3 + " "
					+ manifestazioniParticolari4 + " "
					+ manifestazioniParticolari5 + " " + rispostaComplessuale1
					+ " " + rispostaComplessuale2 + " " + rispostaComplessuale3
					+ " " + rispostaComplessuale4 + " " + rispostaComplessuale5
					+ qf;
		}
		return stringa;

	}

	private boolean controlloQAPrimaria() {
		boolean risposta = true;
		ArrayList<String> controllo = new ArrayList<String>();
		controllo.add("FC");
		controllo.add("CF");
		controllo.add("C");
		controllo.add("FC'b");
		controllo.add("C'bF");
		controllo.add("C'b");
		controllo.add("F/C");
		controllo.add("C/F");
		controllo.add("CN");
		controllo.add("MC");
		controllo.add("CM");
		controllo.add("MC'b");
		controllo.add("M/C");
		controllo.add("ClobC");
		controllo.add("CClob");
		controllo.add("ClobC'b");
		controllo.add("C'bClob");
		controllo.add("Clob/C");
		controllo.add("C/Clob");
		controllo.add("MClobC");
		controllo.add("MClobC'b");
		controllo.add("MClob(C)C'b");
		controllo.add("F(C)/C");
		controllo.add("CF(C)");
		controllo.add("MClob/C");
		controllo.add("F(C)C'b");
		controllo.add("C'bF(C)");
		controllo.add("F(C)C");
		controllo.add("C/F(C)");
		controllo.add("MC(C)");
		controllo.add("M/C(C)");
		controllo.add("MC'b(C)");
		controllo.add("MClob(C)C");
		controllo.add("MClob(C)/C");
		controllo.add("MClob(C)C'b");
		controllo.add("Clob(C)C");
		controllo.add("CClob(C)");
		controllo.add("Clob(C)/C");
		controllo.add("C/Clob(C)");
		controllo.add("Clob(C)C'b");
		controllo.add("C'bClob(C)");
		if (controllo.contains(determinantePrimaria)
				&& qaDeterminantePrimaria == "")
			risposta = false;
		return risposta;
	}

	private boolean controlloTipoDeterminantePrimaria() {
		return (determinantePrimaria.contains("M") && tipoDeterminantePrimaria == "");
	}

	private boolean controlloMDeterminanteSecondaria() {
		return (mDeterminanteSecondaria != "" && tipoDeterminanteSecondaria == "");
	}

	private boolean controlloCDeterminantePrimaria() {
		return (cDeterminanteSecondaria != "" && qaDeterminanteSecondaria == "");
	}

	public boolean isValid() {// TODO isvalida
		boolean isValid = true;
		if (qf == "" || mComprensione == "" || determinantePrimaria == "" || contenutiPrimari == ""
				|| !controlloQAPrimaria()
				|| controlloTipoDeterminantePrimaria()
				|| controlloMDeterminanteSecondaria()
				|| controlloCDeterminantePrimaria()) {
			isValid = false;
		}
		return isValid;
	}

}
